# model settings
norm_cfg = dict(type='SyncBN', requires_grad=True)
model = dict(
    type='EncoderDecoder',
    pretrained=None,
    backbone=dict(type='UNet',
                  in_channels=3,
                  base_channels=64,
                  num_stages=5,
                  strides=(1, 1, 1, 1, 1),
                  enc_num_convs=(2, 2, 2, 2, 2),
                  dec_num_convs=(2, 2, 2, 2),
                  downsamples=(True, True, True, True),
                  enc_dilations=(1, 1, 1, 1, 1),
                  dec_dilations=(1, 1, 1, 1),
                  with_cp=False,
                  conv_cfg=None,
                  norm_cfg=norm_cfg,
                  act_cfg=dict(type='ReLU'),
                  upsample_cfg=dict(type='InterpConv'),
                  norm_eval=False),
    decode_head=dict(type='PSPHead',
                     in_channels=64,
                     in_index=4,
                     channels=16,
                     pool_scales=(1, 2, 3, 6),
                     dropout_ratio=0.1,
                     num_classes=2,
                     norm_cfg=norm_cfg,
                     align_corners=False,
                     loss_decode=dict(type='CrossEntropyLoss',
                                      use_sigmoid=False,
                                      loss_weight=1.0)),
    auxiliary_head=dict(type='FCNHead',
                        in_channels=128,
                        in_index=3,
                        channels=64,
                        num_convs=1,
                        concat_input=False,
                        dropout_ratio=0.1,
                        num_classes=2,
                        norm_cfg=norm_cfg,
                        align_corners=False,
                        loss_decode=dict(type='CrossEntropyLoss',
                                         use_sigmoid=False,
                                         loss_weight=0.4)),
    # model training and testing settings
    train_cfg=dict(),
    test_cfg=dict(mode='slide', crop_size=256, stride=170))
